Form-Based Authentication হলো Spring Security-তে একটি জনপ্রিয় Authentication প্রক্রিয়া, যেখানে ব্যবহারকারী একটি কাস্টম লগইন ফর্ম ব্যবহার করে অ্যাপ্লিকেশনে লগইন করতে পারে। এটি REST API এবং Web Applications উভয়ের জন্য প্রযোজ্য।
Form-Based Authentication সেটআপ করার ধাপসমূহ:
Step 1: প্রজেক্ট তৈরি
Maven ডিপেনডেন্সি:
<dependencies>
<!-- Spring Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- Thymeleaf (ফর্ম টেম্পলেটের জন্য) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
Step 2: Spring Security Configuration
@EnableWebSecurity ব্যবহার করে কাস্টম কনফিগারেশন তৈরি করুন।
SecurityConfig ক্লাস:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/login", "/resources/**", "/css/**").permitAll() // Login পেজ এবং স্ট্যাটিক ফাইল ফ্রি
.anyRequest().authenticated() // অন্য সব রিকোয়েস্ট প্রোটেক্টেড
.and()
.formLogin()
.loginPage("/login") // Custom login পেজ
.defaultSuccessUrl("/home", true) // লগইন সফল হলে
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user")
.password("{noop}password") // No password encoding (development only)
.roles("USER")
.and()
.withUser("admin")
.password("{noop}admin")
.roles("ADMIN");
}
}
Step 3: কাস্টম লগইন পেজ তৈরি
Spring Boot ডিফল্ট লগইন ফর্ম ব্যবহার না করে কাস্টম লগইন পেজ ব্যবহার করা হবে।
login.html (Thymeleaf Template):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Login</title>
</head>
<body>
<h1>Login Page</h1>
<form th:action="@{/login}" method="post">
<div>
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
</div>
<div>
<button type="submit">Login</button>
</div>
</form>
<p th:if="${param.error}">Invalid username or password</p>
<p th:if="${param.logout}">You have been logged out</p>
</body>
</html>
Step 4: হোম পেজ তৈরি
লগইন সফল হলে ব্যবহারকারীকে /home রিডাইরেক্ট করা হবে।
home.html (Thymeleaf Template):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome to Home Page!</h1>
<p>You are successfully logged in.</p>
<form th:action="@{/logout}" method="post">
<button type="submit">Logout</button>
</form>
</body>
</html>
Step 5: Controller তৈরি
Spring MVC কন্ট্রোলার ব্যবহার করে /login এবং /home পেজ পরিচালনা করা হবে।
LoginController:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login"; // login.html টেম্পলেট রিটার্ন করবে
}
@GetMapping("/home")
public String home() {
return "home"; // home.html টেম্পলেট রিটার্ন করবে
}
}
Step 6: Static Resources (CSS ফাইল যুক্ত করা)
style.css:
body {
font-family: Arial, sans-serif;
margin: 20px;
}
form {
margin-top: 20px;
}
button {
background-color: #4CAF50;
color: white;
padding: 10px 20px;
border: none;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
স্ট্যাটিক ফাইলের জন্য:
ফাইলটি src/main/resources/static/css/style.css এ রাখুন।
Step 7: অ্যাপ্লিকেশন চালু করুন
অ্যাপ চালু করুন:
mvn spring-boot:run- অ্যাক্সেস URL:
- লগইন পেজ:
http://localhost:8080/login - লগইন করার জন্য:
- Username:
user - Password:
password
- Username:
- লগইন পেজ:
Spring Security Workflow:
/loginরিকোয়েস্ট করলে কাস্টম লগইন পেজ দেখা যাবে।- সঠিক ইউজারনেম এবং পাসওয়ার্ড দিয়ে লগইন করলে
/homeএ রিডাইরেক্ট হবে। - লগআউট করার জন্য
/logoutরিকোয়েস্ট করলে/login?logoutপেজে রিডাইরেক্ট হবে।
উপসংহার:
এই উদাহরণটি একটি মৌলিক Spring Security প্রজেক্টের কাস্টম Form-Based Authentication কনফিগারেশন প্রদর্শন করে। এটি Spring Security-এর আরও উন্নত বৈশিষ্ট্য যেমন ডাটাবেস-ভিত্তিক Authentication, OAuth2 Integration, এবং JWT এর মতো ফিচার শেখার জন্য একটি ভিত্তি হিসেবে কাজ করবে।
Read more